#include "../../../include/graphics/gl/GLFont.hpp"
using namespace klas;
using namespace graphics;
using namespace gl;

GLFont::GLFont()
{
  m_font = NULL;
}

GLFont::GLFont(string path, uint32 size)
{
  m_font = NULL;
  load(path, size);
}

GLFont::~GLFont()
{
  klasDelete(m_font);
}

bool GLFont::isValid() const
{
  // 0 implies success
  return m_font->Error() == 0;
}

bool GLFont::setSize(uint32 size)
{
  m_font->FaceSize(size);
  return isValid();
}

uint32 GLFont::getSize() const
{
  return m_font->FaceSize();
}


bool GLFont::load(string path, uint32 size)
{
  klasDelete(m_font);
  m_font = new FTGLTextureFont(path.c_str());
  
  if(isValid())
  {
    m_font->FaceSize(size); 
    return true;
  }

  return false;
}

double GLFont::len(string str)
{
  return abs((m_font->BBox(str.c_str()).Upper().X()) - m_font->BBox(str.c_str()).Lower().X());
}

void GLFont::render(string text)
{
  m_font->Render(text.c_str(), text.length(), FTPoint(-len(text) / 2.0, - m_font->LineHeight() / 4.0));
}